home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / picture / segment.c < prev    next >
Text File  |  1993-09-23  |  3KB  |  104 lines

  1. //    Copyright 1993 Ralph Gonzalez
  2.  
  3. /*
  4. *    FILE:        segment.c
  5. *    AUTHOR:        R. Gonzalez
  6. *    CREATED:    October 2, 1990
  7. *
  8. *    defines methods for abstract segment classes, from which
  9. *    all graphics figures descend
  10. */
  11.  
  12. # include    "segment.h"
  13.  
  14. /******************************************************************
  15. *    generic set-color.  derived classes should override!
  16. ******************************************************************/
  17. void    Segment::set_color(color segment_color)
  18. {
  19. }
  20.  
  21. /******************************************************************
  22. *    generic draw.  derived classes should override!
  23. ******************************************************************/
  24. void    Segment::draw(Camera* camera,Projector* projector,
  25.                     Transformation* trans)
  26. {
  27. }
  28.  
  29. /******************************************************************
  30. *    generic move.  derived classes should override!
  31. ******************************************************************/
  32. void    Segment::move(Transformation* trans)
  33. {
  34. }
  35.  
  36. /******************************************************************
  37. *    initialize abstract nested segment.  Derived class should init-
  38. *    ialize segments and num_segments appropriately.  Make sure
  39. *    num_segments <= MAX_SEGMENTS.
  40. ******************************************************************/
  41. Nested_Segment::Nested_Segment(void)
  42. {
  43.     transformation = new Transformation;
  44.     num_segments = 0;
  45. }
  46.  
  47. /******************************************************************
  48. *    Set nested segment color.  No need to override.
  49. ******************************************************************/
  50. void    Nested_Segment::set_color(color segment_color)
  51. {
  52.     int                i;
  53.     
  54.     for (i=0 ; i<num_segments ; i++)
  55.         segment[i]->set_color(segment_color);
  56. }
  57.  
  58. /******************************************************************
  59. *    Nested segment draw method.  No need to override.
  60. ******************************************************************/
  61. void    Nested_Segment::draw(Camera* camera,Projector* projector,
  62.                             Transformation* received_trans)
  63. {
  64.     int                i;
  65.     Transformation    *sent_trans;
  66.     
  67.     sent_trans = new Transformation;
  68.     
  69.     sent_trans->combine(transformation,received_trans);
  70.     
  71.     for (i=0 ; i<num_segments ; i++)
  72.         segment[i]->draw(camera,projector,sent_trans);
  73.     
  74.     delete sent_trans;
  75. }
  76.  
  77. /******************************************************************
  78. *    Nested segments move by altering their transformation.
  79. *    No need to override.
  80. ******************************************************************/
  81. void    Nested_Segment::move(Transformation* trans)
  82. {
  83.     Transformation    *temp;
  84.     
  85.     temp = new Transformation;
  86.     temp->equate(transformation);
  87.     transformation->combine(temp,trans);
  88.     delete temp;
  89. }
  90.  
  91. /******************************************************************
  92. *    destroy.  No need to override.
  93. ******************************************************************/
  94. Nested_Segment::~Nested_Segment(void)
  95. {
  96.     int        i;
  97.     
  98.     delete transformation;
  99.     
  100.     for (i=0 ; i<num_segments ; i++)
  101.         delete segment[i];
  102. }
  103.  
  104.